<?php

use think\facade\Config;
use think\facade\Db;
use think\facade\Validate;
use think\validate\ValidateRule;

if (!function_exists('dict_arr')) {
    /**
     * 字典类型获取
     * @param string $type
     * @return array
     */
    function dict_arr(string $type = '')
    {
        $list = Db::name('SystemDict')->where('type', $type)->column('name', 'value');
        return $list;
    }
}

if (!function_exists('dict_list')) {
    /**
     * 字典类型获取
     * @param string $type
     * @param string $order
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    function dict_list(string $type = '', $order = 'id asc')
    {
        return Db::name('SystemDict')->where('type', $type)->field('name,value')->order($order)->select()->toArray();
    }

}

if (!function_exists('pre')) {
    /**
     * 原样输出print_r的内容
     * @param string $content
     */
    function pre(string $content = '')
    {
        echo '<pre>' . print_r($content) . '</pre>';
    }
}

if (!function_exists('encrypt')) {
    /**
     * 密码二次加密
     * @param string $data
     * @return string
     */
    function encrypt(string $data = '')
    {
        return md5(Config::get('app.data_auth_key') . $data);
    }
}

if (!function_exists('format_byte')) {
    /**
     * 字节格式化
     * @param int $bytes
     * @return string
     */
    function format_byte(int $bytes = 0)
    {
        $size_text = array(' B', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
        return round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), 2) . $size_text[(int)$i];
    }
}

if (!function_exists('format_price')) {
    /**
     * 金额格式化
     * @param string $money
     * @return string
     */
    function format_price(string $money)
    {
        return '￥' . format_money($money);
    }
}

if (!function_exists('format_money')) {
    /**
     * 价格格式化
     * @param int $money
     * @return string
     */
    function format_money(float $money = 100)
    {
        return number_format($money, 2, '.', '');
    }
}

if (!function_exists('is_mobile')) {
    /**
     * 验证手机号
     * @param string $str
     * @return bool
     */
    function is_mobile(string $str)
    {
        return Validate::checkRule($str, ValidateRule::must()->isMobile());
    }
}

if (!function_exists('verify_code')) {
    /**
     * 生成验证码
     * @param string $phone
     * @param int $number
     * @param int $time
     * @return mixed
     */
    function verify_code(string $phone, int $number = 6, int $time = 600)
    {
        $codeSet = '0123456789';
        $code = [];
        for ($i = 0; $i < $number; ++$i) {
            $code[$i] = $codeSet[mt_rand(0, strlen($codeSet) - 1)];
        }
        $code = strtoupper(implode('', $code));
        cache($phone, $code, $time);
        $return['code'] = $code;
        $return['phone'] = $phone;

        return $return;
    }
}